1.查看网页源码
直接在curl命令后加上网址,就可以看到网页源码。我们以网址www.sina.com为例.
直接使用curl相当于发送get请求,这就相当与wget命令。
1 | curl www.sina.com |
1 | <html> |
1 | wget www.sina.com |
wget会直接把文件下载到当前目录,而curl命令需要使用-o属性保存。
以下命令将www.sina.com的源代码保存为index.html。
1 | curl -o index.html www.sina.com |
直接使用-O可以不指定文件的名称,直接使用远程文件的名称。但如果远程文件没有名称,会报以下错误:
1 | curl: Remote file name has no length! |
2.自动跳转
上面我们访问www.sina.com的时候,返回的html是错误页面。这是因为www.sina.com新的网址是[www.sina.com.cn]().
在使用curl的时候,使用-L参数可以自动跳转。
1 | curl -L www.sina.com |
3.显示响应头信息
使用-i参数能显示response头信息,连带着网页一起。
1 | curl -i www.sina.com |
1 | HTTP/1.1 301 Moved Permanently |
如果只想显示头信息,不想显示网页,使用-I参数。
1 | curl -I www.sina.com |
4.显示通信过程
-v 参数可以显示一次http通信的整个过程,包括端口连接、 request头信息、response头信息。
1 | * About to connect() to www.sina.com port 80 (#0) |
如果想查看更加详细的信息,使用下面的命令将结果输处到out.txt文件:
1 | curl --trace out.txt www.sina.com |
5.发送表单信息
发送表单信息有GET和POST两种方法。GET方法相对简单,只要把数据附在网址后面就行。
1 | curl example.com/form.cgi?data=xxx |
POST方法必须把数据和网址分开,curl就要用到–data参数。
1 | curl -X POST --data "data=xxx" example.com/form.cgi |
如果你的数据没有经过表单编码,还可以让curl为你编码,参数是--data-urlencode
。
1 | curl -X POST --data-urlencode "date=April 1" example.com/form.cgi |
6.HTTP动词
curl默认的HTTP动词是GET,使用-X
参数可以支持其他动词。
1 | curl -X DELETE www.example.com |
7.文件上传
假定文件上传的表单是下面这样:
1 | <form method="POST" enctype='multipart/form-data' action="upload.cgi"> |
你可以用curl这样上传文件:
1 | curl --form upload=@localfilename --form press=OK [URL] |
8.reference字段
有时你需要在http request头信息中,提供一个referer字段,表示你是从哪里跳转过来的。
1 | curl --referer http://www.example.com http://www.example.com |
9.User-Agent
这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版.
1 | curl --user-agent "[User Agent]" [URL] |
10.Cookie
使用--cookie
参数,可以让curl发送cookie。
1 | curl --cookie "name=xxx" www.example.com |
至于具体的cookie的值,可以从http response头信息的Set-Cookie
字段中得到。
-c cookie-file
可以保存服务器返回的cookie到文件,-b cookie-file
可以使用这个文件作为cookie信息,进行后续的请求。
1 | curl -c cookies http://example.com |
11.增加头信息
有时需要在http request之中,自行增加一个头信息。--header
参数就可以起到这个作用。
1 | curl --header "Content-Type:application/json" http://example.com |
12.HTTP认证
有些网域需要HTTP认证,这时curl需要用到--user
参数。
1 | curl --user name:password example.com |